Computing devices (such as desktop computers, laptop computers, server computers, and the like) typically include one or more system buses for connecting devices to the computing device. Some devices connect to computing devices via buses, such as the universal serial bus, that enable the devices to be physically hot plugged. A device is able to be physically hot plugged if it can be physically connected to or disconnected from the bus during operation of the computing device without causing errors or damage to the computing device. Other devices connect to computing devices via buses, such as the PCI (Peripheral Component Interconnect) bus, that might not enable the devices to be physically hot plugged. Connecting a PCI device to the PCI bus or disconnecting a PCI device from the PCI bus during operation of the computing device causes errors in the computing device and may even physically damage the computing device.
Multifunction devices, i.e. devices that include multiple functions that are separately utilizable by a computing device, implement the various functions with “virtual devices”. Being functional components of the device, virtual devices are not separately hot pluggable. If a multifunction device is physically hot plugged, the virtual devices are all added and/or removed along with the physical/actual device. If the multifunction device is not physically hot pluggable, the virtual devices of that device cannot be added or removed during operation of the computing device.
Operating systems (such as Solaris™, Windows™, OS X™ or the like) that execute on computing devices typically use a device list to interact with devices connected to the computing device. A device list often involves a tree structure of nodes describing the buses connected to the computing device and the devices connected to those buses. The nodes of the device list typically include information that the operating system uses to interact with a respective device. Commonly, the device list is fixed with respect to most devices when the operating system boots up. In other words, the device list is typically not able to change during the operation of the computing device. To allow physically hot pluggable devices to be added to and/or removed during operation of the computing device, device lists typically treat physically hot pluggable devices differently than devices that are not physically hot pluggable. The device lists typically accomplish this by including attachment points for the physically hot pluggable connectors (or interfaces) of the bus. If a device is connected to the connector, the device is represented in the list as a child node of the respective attachment point and the attachment point is indicated as having a device connected. If a device is not connected to the connector, the attachment point has no child node and is indicated as not having a device connected. The device list is operable to be updated for physical hot plugging of a device by updating the status of the attachment point in the list and either adding or removing the child node of the attachment point. Thus, the attachment point enables the device list to change in response to physically hot plugging a device even though the device list is fixed with respect to devices that are not physically hot pluggable.
Virtualized operating systems are operating systems and/or virtual machines that execute within an environment provided by another operating system executing on a computing device. Virtualized operating systems may include operating systems such as Solaris™, Windows™, OS X™ or the like and/or virtual machines such as the Java Virtual Machine™ or the like. Virtualized operating systems are typically executed within an operating system on a computing device for a variety of purposes, such as to enable multiple copies of an operating system to execute on a computing device, to enable different operating systems to execute on a computing device, to control access to the resources of the computing device, and/or to separate different computational activity occurring on the computing device. Virtualized operating systems typically use a virtualized device list to interact with devices connected to the computing device. A virtualized device list is similar to a device list, other than that it is a device list for a virtualized operating system.
Thus, although typical device lists and virtualized device lists enable adding and removing devices that are able to be physically hot plugged during operation of a computing device, they do not support adding or removing devices that are not able to be physically hot plugged. Typical device lists and virtualized device lists also do not enable virtually hot plugging devices (adding or removing devices for an operating system or virtualized operating system without physically connecting/disconnecting the devices from the respective bus) or hot plugging of virtual devices.